// pages/demo1/demo1.js
const app = getApp();
//引入插件：微信同声传译
const plugin = requirePlugin('WechatSI');
//获取全局唯一的语音识别管理器recordRecoManager
const manager = plugin.getRecordRecognitionManager();
const innerAudioContext = wx.createInnerAudioContext();
Page({
  data: { 
    hidden:true,//设置if隐藏
    content:'',//听写内容
    id:0,
    title:'题目',
    description:'描述',
    listen_hidden:false,//内容if隐藏
    set:'播报设置',
    grade:0,
    nums:0, //听写内容个数
    vel:1, //语速
    repeat:1, //词语重复
    time:0, //间隔
    checked:false, //选项框
    listen_time:1, //听力重复
    color:'#707070',
    listenlist:[],
    startListen:false,
    indexOfUrl:0,
    status:0,
    isEnd:true,
    isrestart:1,
    isStop:false
    },
    // 向服务器发送消息 内容为e
    sendMessage(e){
      var msg=e;
       console.log(msg);
      var str='{"is_restart":"'+this.data.isrestart+'","content":"'+msg+'"}';
       //向服务器发送消息
      //  wx.sendSocketMessage({
      //    data:str
      //  })
      let arr=[msg.search('上一个'),msg.search('下一个'),msg.search('重复')]
      let max=-1,maxindex
      for(let i=0;i<arr.length;i++){
        if(arr[i]>max){
          max=arr[i]
          maxindex=i
        }
      }
      console.log(arr,max,maxindex,'识别')
      if(max>-1){
        this.recog(maxindex)
      }   
    },
    playVideo(flag){
      switch (flag){
        case 0:
          this.playfront()
          console.log('上一个')
          break
        case 1:
          this.playnext();
          console.log('下一个')
          break
        case 2:
          innerAudioContext.play();
          console.log('重复')
          break
      }
      manager.stop();
      setTimeout(()=>{
        manager.start()
      },3000)
    },
 toworkReport(){
    var Title=this.data.title;
  var id=this.data.id;
  // var type=this.data.type;
  wx.redirectTo({
    url: '/pages/workRaport/workRaport?title='+Title+'&id='+id,
  })
 },
// 打开以及收起设置
 setting:function(){
   if(this.data.hidden){
    this.setData({
      hidden:false,
      listen_hidden:true,
      set:'收起'
    })
   }
    else{
      this.setData({
        hidden:true,
        listen_hidden:false,
        set:'播报设置'
      })
    }
 },
 checkedTap: function () {
  this.setData({
    "checked": !this.data.checked
  })
},
// 播放作业音频  如果设置重复次数以及间隔时间将会被调整
 playOne(){
   let repeat=this.data.repeat;
   let i=1;
   let time=this.data.time*1000;
    innerAudioContext.play();
    if(repeat>1){
     var a = setInterval(function () { 
      if(i>=repeat-1)
      { 
         clearInterval(a) 
      } 
      innerAudioContext.play();
      console.log(i);
      i++;
      //循环执行代码 
    }, 2000+time) //循环时间 这里是1秒
  }
 },
//  开始听写
 toStart() {
  wx.showModal({
    title: '温馨提示',
    content:'在安静的环境下开始作业，语音的识别准确率会更高噢。过程中可使用语音上一个、下一个、重复进行听力播放的控制',
    showCancel:false
  })
  wx.enableAlertBeforeUnload({
    message: "作业正在进行，是否要退出",
    success: function (res) {
      console.log("方法注册成功:", res);
    },
    fail: function (errMsg) {
      console.log("方法注册失败:", errMsg);
    },
  });
  //  收起设置
  if(!this.data.hidden){
    this.setData({
      hidden:true,
      listen_hidden:false,
      set:'播报设置'
    })
   }
   console.log(this.data.vel);
  //  设置听写音频列表
    var array=this.data.listenlist;
    // 设置播放速度
    if(this.data.vel>=0.5&&this.data.vel<=2){
      var vel=this.data.vel;
      innerAudioContext.playbackRate=vel;
      console.log(vel);
    }
    // 播放第一个
    innerAudioContext.src =array[0];
    this.playOne();
    // innerAudioContext.play();
    var index=0;
    this.setData({
      indexOfUrl:index,
      color:'#fff',
      startListen:true
    })
    // 开启与后端的链接
    this.startRecognition();
    // this.startConnect();
 },
  throttle:function (fn, interval) {
    var last = 0;
    return function () {
        // this和arugments
        var _this = this;
        var _arguments = arguments;
        var now = new Date().getTime();
        if (now - last > interval) {
            fn.apply(_this, _arguments);
            last = now;
        }
    }
  },
  // 开启与后端的链接
 startConnect(){
  var that=this;
  var getPhone = wx.getStorageSync('phone');
  // wx.connectSocket({
  //   url:"wss://www.beitingok.cn:8082/websocket/"+getPhone,
  //   //method:"GET",120.55.195.10  10.161.65.3
  //   success: function () {
  //    console.log("客户端连接成功！");
  //    wx.onSocketOpen(function(){
  //     console.log('webSocket已打开！');
  //     wx.onSocketMessage(function(msg){
  //       console.log(msg)
  //       var indict=msg.data;
  //       if(indict==1){
  //         that.setData({
  //           isrestart:0
  //         })
  //         that.playnext();
  //         manager.stop();
  //         console.log("下一个");
  //       }
  //       if(indict==-1){
  //         that.setData({
  //           isrestart:0
  //         })
  //         that.playfront();
  //         manager.stop();
  //       console.log("上一个")  
  //     }
  //       if(indict==2){ 
  //         that.setData({
  //           isrestart:0
  //         })
  //       innerAudioContext.play();
  //       manager.stop();
  //        console.log("重复")
  //       }
  //     })
  //    })
  //   }
  //  })
  this.setData({
    recordState: true,  //录音状态
    isEnd:false
  })
  // 语音开始识别
   that.startRecognition();
 },
 startRecognition(){
  manager.start({
    lang: 'zh_CN',// 识别的语言，目前支持zh_CN en_US zh_HK sichuanhua
    duration:50000
  })
  this.setData({
    isrestart:1
  })
 },
 playfront(){
   var index=this.data.indexOfUrl;
   if(index<=0){
    wx.showToast({
      title: '已经是第一个了！',
      icon: 'none',
      duration: 2000//持续的时间
    })
   }
   else{
     index=index-1;
     var url=this.data.listenlist[index];
     this.setData({
       indexOfUrl:index
     })
     innerAudioContext.src = url;
     this.playOne();
    //  innerAudioContext.play();
   }
 },

 playnext(){
   var max=this.data.nums;
  var index=this.data.indexOfUrl;
  if(index>=max-1){
    wx.showToast({
      title: '已经是最后一个了！',
      icon: 'none',
      duration: 2000//持续的时间
    })
   }
   else{
     index=index+1;
     var url=this.data.listenlist[index];
     this.setData({
       indexOfUrl:index
     })
      innerAudioContext.src = url;
      this.playOne();
    //  innerAudioContext.play();
   }
 },
//  暂停
 topause(){
   var stop=this.data.isStop;
   console.log("暂停");
  this.setData({
    isStop:!stop
})
   if(this.data.isStop){
     this.setData({
       isEnd:true
     })
     this.startRecognition();
   }
   else {
    this.setData({
      isEnd:false
    })
    manager.stop();
   }
 },
 toRaport(){
  if(!this.data.isEnd){
    // wx.closeSocket();
    // wx.onSocketClose((result) => {
    //   console.log(result);
    // })
  }
   var id=this.data.id;
   var Title=this.data.title;
   var haveclose=false;
   this.setData({
    recordState: false,
    isEnd:true
  })
  // 语音结束识别
  manager.stop();
  var content=this.data.content;
  console.log(content)
  wx.navigateTo({
    url: '/pages/toRaport/toRaport?title='+Title+'&id='+id+'&content='+content,
  })
 },
 /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.recog=this.throttle(this.playVideo,2000)
    this.initRecord();
    this.setData({
      id: options.id,
      description:options.description,
      title:options.title,
      content: options.content,
      status:options.status
    })
    var id=this.data.id;
    var status=this.data.status
    //  console.log(id,'this.data.status');
   var that=this;
    wx.request({
      url: 'http://106.15.67.178:8080/getWorkDetail',
      data:{
        'workId':id
      },
      method:'GET',
        success:res=>{
         
          var array=JSON.parse(res.data.records);
          var arrlen=0;
           console.log(array,'asd');
          for(var i = 0; i < array.length; i++) {
           arrlen++;
         }
          that.setData({
            nums: arrlen,
            listenlist:array,
          })
        },
        fail:err=>{
          console.log(err)
        }
    })
    
  },

  //识别语音 -- 初始化
  initRecord: function () {
    const that = this;
    // 有新的识别内容返回，则会调用此事件
    manager.onRecognize = function (res) {
      console.log(res,'内容')
      that.setData({
       text:res.result
      })
      that.sendMessage(res.result);
    }
    // 正常开始录音识别时会调用此事件
    manager.onStart = function (res) {
      console.log("成功开始录音识别", res)
    }
    // 识别错误事件
    manager.onError = function (res) {
      console.error("error msg", res)
      if(that.data.isEnd==false){
        that.startRecognition()
        }
    }
    //识别结束事件
    manager.onStop = function (res) {
      console.log('..............结束录音')
      console.log('录音总时长 -->' + res.duration + 'ms'); 
      console.log('语音内容 --> ' + res.result);
      if(that.data.isEnd==false){
        that.startRecognition()
        }
    }
  },

    /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    // if(!this.data.isEnd){
    //   wx.closeSocket();
    //   wx.onSocketClose((result) => {
    //     console.log(result);
    //   })
    // }
    this.setData({
      color:'#707070',
      startListen:false
    })
    this.setData({
      recordState: false,  //录音状态
      isEnd:true
    })
    manager.stop();
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    // if(!this.data.isEnd){
    //   wx.closeSocket();
    //   wx.onSocketClose((result) => {
    //     console.log(result);
    //   })
    // }
    this.setData({
      color:'#707070',
      startListen:false
    })
    this.setData({
      recordState: false,  //录音状态
      isEnd:true
    })
    manager.stop();
    
  },

  writeVel(e){
    this.setData({
      vel:e.detail.value
      });
  },

  writeRepeat(e){
    this.setData({
      repeat:e.detail.value
      });
  },

  writeTime(e){
    this.setData({
     time:e.detail.value
      });
  },
})